"use strict";
const { Model } = require("sequelize");
const { IdGenerator } = require("../utils/idGenerator");
const moment = require("moment");
module.exports = (sequelize, DataTypes) => {
  class Article extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
    }
  }

  Article.init(
    {
      id: {
        type: DataTypes.INTEGER.UNSIGNED, // 无符号整数类型
        allowNull: false,
        primaryKey: true,
        defaultValue: function () {
          return IdGenerator.getNextID(); // 使用封装的ID生成方法
        },
      },
      title: {
        type: DataTypes.STRING, //字符串
        allowNull: false, //不能为空
        validate: {
          //提示信息
          notNull: {
            msg: "标题必须存在。",
          },
          notEmpty: {
            msg: "标题不能为空。",
          },
          len: {
            args: [2, 45],
            msg: "标题长度需要在2 ~ 45个字符之间。",
          },
        },
      },
      content: DataTypes.STRING,
      createdAt: {
        type: DataTypes.DATE,
        get() {
          return moment(this.getDataValue("createdAt")).format(
            "YYYY-MM-DD HH:mm:ss",
          );
        },
      },
    },
    {
      sequelize,
      modelName: "Article",
    },
  );
  return Article;
};
